package bbs.service;

import java.util.List;

import bbs.entity.dto.SessionWebUserDto;
import bbs.entity.enums.UserIntegralOperTypeEnum;
import bbs.entity.query.UserInfoQuery;
import bbs.entity.po.UserInfo;
import bbs.entity.vo.PaginationResultVO;
import bbs.entity.vo.ResponseVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpSession;


/**
 * 用户信息 业务接口
 */
public interface UserInfoService {

	/**
	 * 根据条件查询列表
	 */
	List<UserInfo> findListByParam(UserInfoQuery param);

	/**
	 * 根据条件查询列表
	 */
	Integer findCountByParam(UserInfoQuery param);

	/**
	 * 分页查询
	 */
	PaginationResultVO<UserInfo> findListByPage(UserInfoQuery param);

	/**
	 * 新增
	 */
	Integer add(UserInfo bean);

	/**
	 * 批量新增
	 */
	Integer addBatch(List<UserInfo> listBean);

	/**
	 * 批量新增/修改
	 */
	Integer addOrUpdateBatch(List<UserInfo> listBean);

	/**
	 * 多条件更新
	 */
	Integer updateByParam(UserInfo bean,UserInfoQuery param);

	/**
	 * 多条件删除
	 */
	Integer deleteByParam(UserInfoQuery param);

	/**
	 * 根据UserId查询对象
	 */
	UserInfo getUserInfoByUserId(String userId);


	/**
	 * 根据UserId修改
	 */
	Integer updateUserInfoByUserId(UserInfo bean,String userId);


	/**
	 * 根据UserId删除
	 */
	Integer deleteUserInfoByUserId(String userId);


	/**
	 * 根据Email查询对象
	 */
	UserInfo getUserInfoByEmail(String email);


	/**
	 * 根据Email修改
	 */
	Integer updateUserInfoByEmail(UserInfo bean,String email);


	/**
	 * 根据Email删除
	 */
	Integer deleteUserInfoByEmail(String email);


	/**
	 * 根据NickName查询对象
	 */
	UserInfo getUserInfoByNickName(String nickName);


	/**
	 * 根据NickName修改
	 */
	Integer updateUserInfoByNickName(UserInfo bean,String nickName);


	/**
	 * 根据NickName删除
	 */
	Integer deleteUserInfoByNickName(String nickName);


	/**
	 * 用户注册
	 * @param email
	 * @param nickName
	 * @param password
	 * @param emailCode
	 */
	void register(String email,String nickName,String password,String emailCode);

	/**
	 * 更新用户积分
	 * @param userId
	 * @param operType
	 * @param changeType
	 * @param integral
	 */
	void updateUserInternal(String userId, UserIntegralOperTypeEnum operType, Integer changeType, Integer integral);

	/**
	 * 获取用户登录信息
	 * @param email
	 * @param password
	 * @param ip
	 * @return
	 */
	SessionWebUserDto login(String email, String password, String ip);

	/**
	 * 重置密码
	 * @param email
	 * @param password
	 * @param emailCode
	 */
	void resetPwd(String email, String password, String emailCode);

	/**
	 * 更新用户头像
	 * @param userInfo
	 * @param avatar
	 */
	void updateUSerInfo(UserInfo userInfo, MultipartFile avatar);

	/**
	 * 更新用户状态
	 * @param status
	 * @param userId
	 */
	void updateUserStatus(Integer status, String userId);

	void sendMessage(@Param("message") String msg, @Param("userId") String userId, @Param("integral") Integer integral);

}